package cn.sanch.basic.controller;

import cn.sanch.basic.util.AjaxResult;
import cn.sanch.basic.util.FastDfsUtil;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;


/**
 * @author sanch37
 * 2022/6/1
 */
@RestController
@RequestMapping("/fastdfs")
public class FastDfsController {


    /**
     * 接口：文件上传
     *
     * RequestPart对复杂表单项的处理，默认name="file",与上传文件的name属性值一致
     * @param file MultipartFile file
     * @return AjaxResult
     */ 
    @PostMapping
    public AjaxResult upload(@RequestPart MultipartFile file) {
        try {
            /*
            *   获取原始文件路径名字
            *   返回值是一个字符串
            * */
            String originalFilename = file.getOriginalFilename(); 
            /* 
            *   获取原始文件名的后缀，不带.符号
            *   substring() 含头不含尾，所以 + 1
            * */
            String netName = originalFilename.substring(originalFilename.indexOf(".") + 1);
            /*
            *   调用工具类方法upload(),传入 和后缀
            *   返回是一个上传后的文件名
            * */

            String filePath = FastDfsUtil.upload(file.getBytes(), netName);
            /*
            *   把上传后的文件名传给前端
            *   /group1/M00/00/0F/oYYBAGJ6JV2ANENZAAhNlgqHjro238.gif
            * */


            return AjaxResult.me().setResultObj(filePath);

        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.me().setSuccess(false).setMessage("上传失败！" + e.getMessage());
        }
    }

    /**
     * 接口：文件删除
     *
     * 端发出的请求是delete请求，参数是用原始的方式  ？=xxxxxxx 因为我们需要传递文件路径，路径有很多/，
     * 例：http://localhost:8080/department?path=/group1/M00/00/09/rBEACmKXF8-AUc6KAANsldwx3H4713.jpg
     * 跟我们的请求地址组成就冲突了，就会报错
     * @param path String path 路径
     * @return AjaxResult
     */
    @DeleteMapping
    public AjaxResult delete(@RequestParam String path) {
        try {
            /*
            *   获取组名
            *   截取
            *   /group1/M00/00/09/rBEACmKXF8-AUc6KAANsldwx3H4713.jpg
            *
            * */
            //首先去掉第一位的 / 符号  得到group1/M00/00/09/rBEACmKXF8-AUc6KAANsldwx3H4713.jpg
            String pathTmp = path.substring(1);
            //再获取组名，从第一位截取到 / 符号。因为含头不含尾
            String groupName = pathTmp.substring(0, pathTmp.indexOf("/"));
            //再获取文件名 group1/M00/00/09/rBEACmKXF8-AUc6KAANsldwx3H4713.jpg 从 / 符号后一位截取到最后
            String fileName = pathTmp.substring(pathTmp.indexOf("/") + 1);
            //调用工具类删除方法
            FastDfsUtil.delete(groupName, fileName);
            return AjaxResult.me();
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.me().setSuccess(false).setMessage("删除失败！" + e.getMessage());
        }

    }
}
